/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myftp.app.model;

import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import myftp.app.form.ConnectForm;

/**
 *
 * @author CAVARLE Glenn, LUCAS Stéphane
 * Classe pour récupérer les informations de connexion
 */
public class ConnexionInfoModel {

    /**
     * Nom du serveur
     * @var hostName
     */
    private String hostName;
    /**
     * Login de l'utilisateur
     * @var login
     */
    private String login;
    /**
     * Mot de passe de l'utilisateur
     * @var pass
     */
    private String pass;
    /**
     * Port de comunication
     * @var port
     */
    private String port;

    /**
     * Constructeur ConnexionInfoModel
     * @param name
     * @param login
     * @param pass
     * @param port
     */
    public ConnexionInfoModel(String name, String login, String pass, String port) {
        this.hostName = name;
        this.login = login;
        this.pass = pass;
        this.port = port;
    }

    /**
     * Constructeur ConnexionInfoModel
     * @param map
     */
    public ConnexionInfoModel(HashMap<String, String> map) {
        this.hostName = map.get("host");
        this.login = map.get("login");
        this.pass = map.get("password");
        this.port = map.get("port");
    }

    /**
     * Ajoute une liste d'information de connexion
     * @param info
     * @return
     */
    public boolean add(ConnexionInfoModel info) {
        return true;
    }

    public String getHostName() {
        return hostName;
    }

    public void setHostName(String hostName) {
        this.hostName = hostName;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    /**
     *  Parseur du fichier contenant les serveur précédemments enregistrés
     * @param filename
     */
    public static ArrayList<ConnexionInfoModel> parseFile(String filename) {
        ArrayList<ConnexionInfoModel> list = new ArrayList<ConnexionInfoModel>();
        File file = new File(filename);
        FileInputStream fileStream = null;
        try {
            if (!file.exists()) {
                /* Si le fichier n'existe pas, il est créé */
                file.createNewFile();
                return list;
            }
            /* Ouverture du flot de lecture */
            fileStream = new FileInputStream(filename);
            InputStreamReader fileBuffer = new InputStreamReader(fileStream);
            BufferedReader fileReader = new BufferedReader(fileBuffer);
            String line;

            /* Tant que le fichier n'est pas terminé */
            while ((line = fileReader.readLine()) != null) {

                /* Récupération des différents champs */
                String[] part = line.split("/");
                System.out.println(part[0] + " " + part[1] + " " + part[2] + " " + part[3]);
                list.add(new ConnexionInfoModel(part[0], part[1], part[2], part[3]));

            }
            /* Fermeture du fichier */
            fileReader.close();

            /* En cas de problèmes */
        } catch (IOException ex) {
            System.out.println("fichier");
        }

        return list;
    }

    /**
     * Sauvegarde dans le fichier des informations de connexion
     * @param filename
     */
    public void save(String filename) {
        FileOutputStream fileStream = null;
        File file = new File(filename);

        try {
            if (!file.exists()) {
                /* Si le fichier n'existe pas, il est créé */
                file.createNewFile();
            }
            /* Ouverture du flot en écriture */
            fileStream = new FileOutputStream(file, true);
            OutputStreamWriter fileBuffer = new OutputStreamWriter(fileStream);
            BufferedWriter fileWriter = new BufferedWriter(fileBuffer);
            /* Ecriture dans le fichier */
            fileWriter.write(this.hostName + "/" + this.login + "/" + this.pass + "/" + this.port);
            fileWriter.newLine();
            fileWriter.flush();
            /* Fermeture du fichier */
            fileWriter.close();

            /* En cas de problèmes */
        } catch (IOException ex) {
            System.out.println("pb écriture fichier");
        }
    }

    /**
     * Extraction des informations de connexion vers la barre de connexion
     */
    public ConnectForm toForm() {
        ConnectForm form = new ConnectForm();
        form.hostField.setText(this.hostName);
        form.loginField.setText(this.login);
        form.passwdField.setText(this.pass);
        form.portField.setText(this.port);
        return form;

    }
}
